home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / extern.h < prev    next >
C/C++ Source or Header  |  1979-12-31  |  29KB  |  922 lines

  1. /* --------------------------------- extern.h ------------------------------- */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* mainly function prototypes.
  8. */
  9.  
  10. #ifndef FLY8_EXTERN
  11. #define FLY8_EXTERN
  12.  
  13. #ifdef    DEBUG_MULDIV
  14. #undef    USE_ASM
  15. #endif
  16.  
  17. #ifdef    USE_ASM
  18.  
  19. #define    dithadj        dithadja
  20. #define    VMmul        Vmula
  21. #define    build_mat    matyxz
  22. #define my_sin(a)    my_sina(a)
  23. #define    fmul        fmula
  24. #define    fdiv        fdiva
  25. #define    muldiv        muldiva
  26. #define    LL(x)        ((int)(x))
  27.  
  28. #else
  29.  
  30. #define dithadj(x,d,t) \
  31.     ((int)(((x) * (long)(t) + ((x)>=0?(d):-(d))) / 1000))
  32. #define VMmul(R,V,M) \
  33.     (R[X]=VMRfmul(V,M,X),R[Y]=VMRfmul(V,M,Y),R[Z]=VMRfmul(V,M,Z))
  34. #define build_mat cbuild_matyxz
  35. #define my_sin(a)    my_sinc(a)
  36.  
  37. #ifdef    DEBUG_MULDIV
  38.  
  39. #define    fmul(x,y)    fmulchk ((x), (y), __FILE__, __LINE__)
  40. #define    fdiv(x,y)    fdivchk ((x), (y), __FILE__, __LINE__)
  41. #define    muldiv(x,y,z)    muldivchk ((x), (y), (z), __FILE__, __LINE__)
  42. #define LL(x)        lcheck ((x), "LL", __FILE__, __LINE__)
  43.  
  44. #else
  45.  
  46. #define    fmul(x,y)    ((int)(((x) * (long)(y)) >> FSCALE))
  47. #define    fdiv(x,y)    FnDIV (FSCALE, (x), (y))
  48. #define muldiv(x,y,z)    ((int)(((x) * (long)(y)) / (z)))
  49. #define    LL(x)        ((int)(x))
  50.  
  51. #endif
  52. #endif
  53.  
  54.  
  55. #ifndef REFRESH
  56. #define    REFRESH    60    /* 60ms, aiming at 67=4@60Hz or 69=5@72Hz */
  57. #endif
  58.  
  59. #define C_PI        3.1416
  60. #define C_G        9.81
  61.  
  62. #define ALLOCATE(type)    (type *)xcalloc (sizeof (type), 1)
  63.  
  64. #define iabs(i)        ((Uint)abs(i))
  65.  
  66. #define T(x)        (0 != (x))
  67. #define F(x)        (0 == (x))
  68.  
  69. /* alarms.c */
  70. extern void    FAR alarm_set (int mode);
  71. extern void    FAR hud_alarm (HUD *h, OBJECT *p, int color, int mode, int hon);
  72.  
  73. /* airdata.c */
  74. extern void    FAR airdata (long height, int *srho, int *rrho, int *rho,
  75.     int *sos);
  76.  
  77. /* altitude.c */
  78. extern void    FAR show_altitude (HUD *h, OBJECT *p, int sx, int sy, int maxx,
  79.     int maxy, int orgx, int orgy, int ttx, int tty, int tx, int ty, int ss,
  80.     int shifty, int VVD[2]);
  81.  
  82. /* body.c */
  83. extern BODY *    FAR bodies_new (ONAME name);
  84. extern BODY *    FAR bodies_del (ONAME name);
  85. extern void    FAR bodies_extent (ONAME name);
  86. extern int    FAR bodies_init (void);
  87. extern void    FAR bodies_term (void);
  88. extern ONAME    FAR body_name (char *title);
  89.  
  90. /* buffers.c */
  91. #ifdef INLINE
  92. #define gr_1op(a)    GR_1OP(a)
  93. #define GR_1OP(a) \
  94.     do { \
  95.         if (st.buf_avail >= 1 || buffer_new ()) { \
  96.             *(st.buf_p)++ = a; \
  97.             --st.buf_avail; \
  98.         } \
  99.     } while (0)
  100.     
  101. #define gr_2op(a,b)    GR_2OP(a,b)
  102. #define GR_2OP(a,b) \
  103.     do { \
  104.         if (st.buf_avail >= 2 || buffer_new ()) { \
  105.             *(st.buf_p)++ = a; \
  106.             *(st.buf_p)++ = b; \
  107.             st.buf_avail -= 2; \
  108.         } \
  109.     } while (0)
  110.     
  111. #define gr_4op(a,b,c,d)    GR_4OP(a,b,c,d)
  112. #define GR_4OP(a,b,c,d) \
  113.     do { \
  114.         BUFLINE    *zp; \
  115.         if (st.buf_avail >= 4 || buffer_new ()) { \
  116.             zp = st.buf_p; \
  117.             zp[0] = a; \
  118.             zp[1] = b; \
  119.             zp[2] = c; \
  120.             zp[3] = d; \
  121.             st.buf_p = zp + 4; \
  122.             st.buf_avail -= 4; \
  123.         } \
  124.     } while (0)
  125.  
  126. #else
  127. extern void    FAR FASTCALL gr_1op (Ushort a);
  128. extern void    FAR FASTCALL gr_2op (Ushort a, Ushort b);
  129. extern void    FAR FASTCALL gr_4op (Ushort a, Ushort b, Ushort c, Ushort d);
  130. #endif
  131.  
  132. #define gr_color(c)    gr_1op (T_COLOR   | (Ushort)(st.colors[c]))
  133. #define gr_mode(m)    gr_1op (T_MODE    | (Ushort)(m))
  134. #define gr_move(x,y)    gr_2op (T_MOVE    | (Ushort)(x), (Ushort)(y))
  135. #define gr_draw(x,y)    gr_2op (T_DRAW    | (Ushort)(x), (Ushort)(y))
  136. #define gr_ellipse(x,y,rx,ry) \
  137.             gr_4op (T_ELLIPSE | (Uint)(x), (Ushort)(y), \
  138.                 (Ushort)(rx), (Ushort)(ry))
  139. #define gr_line(x1,y1,x2,y2) \
  140.     do { \
  141.         gr_move ((x1), (y1)); \
  142.         gr_draw ((x2), (y2)); \
  143.     } while (0)
  144.  
  145. extern void    FAR buffer_show (BUFFER *b);
  146. extern void    FAR buffers_show (int which);
  147. extern void    FAR buffer_erase (BUFFER *b, Uint color);
  148. extern void    FAR buffers_erase (int which);
  149. extern void    FAR buffer_free (BUFFER *b);
  150. extern void    FAR buffers_free (int which);
  151. extern void    FAR buffers_term (void);
  152. extern long    FAR buffers_size (int which);
  153. extern void    FAR buffer_close (void);
  154. extern BUFFER *    FAR buffer_new (void);
  155.  
  156.  
  157. /* cockpit.c */
  158. extern void    FAR show_inst (VIEW *view, OBJECT *obj);
  159.  
  160. /* colors.c */
  161. extern char *    FAR color_name (int color);
  162. extern char *    FAR color_rgb (int color);
  163. extern int    FAR set_rrggbb (int letter, Ulong value);
  164. extern void    FAR set_palette (void);
  165. extern int    FAR color_assign (Ushort *item);
  166. extern int    FAR menu_palette (void);
  167. extern int    FAR menu_colors (void);
  168.  
  169. /* command.c */
  170. extern Ushort    FAR set_lists (Ushort list);
  171. extern int    FAR user_command (void);
  172. extern int    FAR menu_cmd (void);
  173.  
  174. /* compass.c */
  175. extern void    FAR show_compass (HUD *h, OBJECT *p, int mode);
  176.  
  177. /* debug.c */
  178. extern int    FAR fmulchk (long x, long y, char *file, int line);
  179. extern int    FAR fdivchk (long x, long y, char *file, int line);
  180. extern int    FAR muldivchk (long x, long y, long z, char *file, int line);
  181. extern long    FAR lcheck (long x, char *name, char *file, int line);
  182.  
  183. /* editstr.c */
  184. extern int    FAR editset (
  185.     void *    (FAR *s_malloc) (int n),
  186.     void *    (FAR *s_free) (void *p, int n),
  187.     void    (FAR *s_put) (int ch),
  188.     int    (FAR *s_get) (void),
  189.     void    (FAR *s_show) (int edit_mode),
  190.     int    s_saved,
  191.     int    m_recall);
  192. extern int    FAR editget (char **str, int *len, int *pos, int *mode);
  193. extern int    FAR editstr (char FAR* str, int len);
  194.  
  195. /* field.c */
  196. extern int    FAR field_find (FILE *ifile, char *line);
  197. extern int    FAR field_long (FILE *ifile, char *line, long *value);
  198. extern int    FAR field_read (FILE *ifile, struct FldTab *fld, char *line);
  199. #define READ_I        0x0100
  200. #define READ_S        0x0200
  201. #define READI(name)    {READ_I+sizeof (READFLD.name), &READFLD.name}
  202. #define READS(name)    {READ_S, &READFLD.name}
  203.  
  204. /* fly8.c (this is where main() is) */
  205. extern struct status    NEAR st;
  206. extern int    FAR check_stack (int func);
  207.  
  208. /* fly8str.c */
  209. extern int    FAR edit_init (void);
  210. extern int    FAR edit_term (void);
  211. extern int    FAR edit_str (char *prompt, char FAR* str, int len);
  212. extern void    FAR edit_show (VIEW *view, int orgx, int orgy, int maxx,
  213.     int maxy, int bss);
  214.  
  215. /* grmgr.c */
  216. extern DEVICE *    FAR devices_select (char *dname);
  217. extern void    FAR devices_release (void);
  218. extern struct GrDriver NEAR* FAR devices_init (char *name);
  219. extern void    FAR devices_term (void);
  220.  
  221. /* heading.c */
  222. extern void    FAR show_heading (HUD *h, VIEW *view, OBJECT *p, int sx, int sy,
  223.     int maxx, int maxy, int orgx, int orgy, int ttx, int tty, int tx,
  224.     int ty, int ss, int shifty, int VVD[2]);
  225.  
  226. /* hud.c */
  227. extern void    FAR show_hud (VIEW *view, OBJECT *pov, OBJECT *p,
  228.     int orgx, int orgy, int maxx, int maxy, int mode);
  229. extern int    FAR get_vv (OBJECT *p, VECT RR);
  230. extern void    FAR show_num (int x, int y, long t, int s, int c, int orgx,
  231.     int orgy, int maxx, int maxy, int shifty);
  232. extern void    FAR add_segment (int x1, int y1, int x2, int y2,
  233.     int orgx, int orgy, int sx, int sy, int shifty);
  234. extern void    FAR add_dash (int x1, int y1, int x2, int y2, int ndash,
  235.     int ratio, int orgx, int orgy, int sx, int sy);
  236. extern void    FAR screen_coords (VIEW *view, VECT RR);
  237. extern int    FAR clip_to_screen (int D[2], VECT RR, int maxx, int maxy,
  238.     int clipx, int clipy, int shifty);
  239. extern void    FAR clip_to_ether (HUD *h, int D[2], int x, int y);
  240. extern int    FAR keep_inside (int *x, int *y, int xl, int xh, int yl, int yh,
  241.     int orgx, int orgy, int clipx, int clipy, int shifty);
  242. extern int    FAR is_in (HUD *h, int x, int y, int dx, int dy);
  243.  
  244. /* hudmenu.c */
  245. extern int    FAR menu_hudtype (void);
  246. extern int    FAR menu_hud (void);
  247. extern void    FAR hud_setup (OBJECT *p);
  248. extern void    FAR cc_setup (void);
  249. extern void    FAR win_setup (void);
  250.  
  251. /* hudtrail.c */
  252. extern void    FAR show_trail (HUD *h, VIEW *view, OBJECT *p);
  253.  
  254. /* ifuncs.c */
  255. #if 1 /*was: ifdef INLINE*/
  256. #define ihypot2d(x,y) \
  257.     SQRT ((x)*(long)(x) + (y)*(long)(y))
  258.  
  259. #define ihypot3d(A) \
  260.     SQRT (A[X]*(long)A[X] + A[Y]*(long)A[Y] + A[Z]*(long)A[Z])
  261. #else
  262. extern Ushort    FAR FASTCALL ihypot2d (int x, int y);
  263. extern Ushort    FAR FASTCALL ihypot3d (VECT A);
  264. #endif
  265.  
  266. #define    D180        0x8000
  267. #define    D90        0x4000
  268. #define    VD90        (D90/VONE)
  269. #define    VD180        (VD90*2)
  270. #define    VD360        (VD90*4)
  271. #define    ANG2DEG(x)    muldiv ((x), 90, D90)
  272. #define    ANG2DEG00(x)    muldiv ((x), 9000, D90)
  273. #define DEG2ANG(x)      muldiv ((x), D90, 90)
  274. #define    ANG2RAD(x)    fmul ((x), FCON(C_PI/2))
  275. #define    RAD2ANG(x)    fmul ((x), FCON(2/C_PI))
  276. #define DEG(x)          ((ANGLE)((x)*(long)D90/90))
  277. #define    SIN(a)        ((a) ? my_sin (a) : 0)
  278. #define    COS(a)        ((a) ? my_sin ((ANGLE)((a)+D90)) : FONE)
  279. #define    ASIN(i)        my_asin(i)            /* [-90...+90] */
  280. #define    ACOS(i)        ((ANGLE)(D90-my_asin(i)))    /* [0...180] */
  281.                             /* note: 180 is -ve! */
  282. #define    ATAN(iy,ix)    my_atan((iy),(ix))
  283. #define    SQRT(ul)    my_sqrt(ul)
  284. #define FSQRT(i)    SQRT(FONE*(Ulong)i)
  285.  
  286. extern int    FAR funcs_init (void);
  287. extern void    FAR funcs_term (void);
  288. extern short    FAR FASTCALL lin2log (short linear);
  289. extern short    FAR FASTCALL my_sinc (ANGLE angle);
  290. extern ANGLE    FAR FASTCALL my_asin (int sin);
  291. extern ANGLE    FAR FASTCALL my_atan (int y, int x);
  292. extern Ushort    FAR FASTCALL my_sqrt (Ulong x);
  293. extern Ulong    FAR FASTCALL lhypot3d (LVECT A);
  294. extern Ulong    FAR FASTCALL ldist3d (LVECT A, LVECT B);
  295. extern Ushort    FAR FASTCALL est_hyp (int x, int y, int z);
  296. extern Ushort    FAR FASTCALL est_dist (LVECT R1, LVECT R2);
  297.  
  298. /* info.c */
  299. extern void    FAR stats_show (void);
  300. extern void    FAR screen_info (VIEW *view, int orgx, int orgy, int maxx,
  301.     int maxy, int bss, int mode);
  302.  
  303. /* init.c */
  304. extern void    FAR initialize (char *argv[]);
  305.  
  306. /* kbdmgr.c */
  307. extern struct KbdDriver NEAR* FAR kbrd_init (char *name);
  308. extern void    FAR kbrd_term (void);
  309.  
  310. /* lamps.c */
  311. extern void    FAR show_lamps (VIEW *view, OBJECT *p, int maxx, int maxy,
  312.     int orgx, int orgy, int ss);
  313.  
  314. /* land.c */
  315. extern int    FAR land_init (void);
  316. extern void    FAR land_term (void);
  317. extern int    FAR land_update (OBJECT *pov);
  318.  
  319. /* lnd.c */
  320. extern int    FAR lnd_read (void);
  321.  
  322. /* log.c */
  323. extern int    FAR log_init (void);
  324. extern void    FAR log_term (void);
  325. extern int    FAR log_flush (int now);
  326. extern int    FAR LogPrintf (const char *fmt, ...);
  327. extern void    FAR LogDumpHex (char *title, Uchar *h, int hlen);
  328.  
  329. /* loop.c */
  330. extern void    FAR active_loop (Ulong t);
  331. extern void    FAR screen_start (void);
  332. extern void    FAR screen_empty (void);
  333. extern void    FAR double_buffer (int mode);
  334. extern void    FAR reset_page (int empty);
  335. extern void    FAR show_fixed (int del);
  336. extern OBJECT *    FAR get_viewer (int type);
  337. extern void    FAR save_viewport (OBJECT *p);
  338. extern void    FAR get_viewport (OBJECT *p);
  339. extern void    FAR pause_set (Ushort mode);
  340.  
  341. /* macros.c */
  342. extern int    FAR mread (void);
  343. extern int    FAR mgetch (void);
  344. extern int    FAR mac_interpret (Ushort *keys, int len);
  345. extern void    FAR mac_flush (void);
  346. extern int    FAR mac_init (void);
  347. extern void    FAR mac_term (void);
  348.  
  349. /* mat.c */
  350. #if 1 /*was: ifdef INLINE*/
  351. #define Mident(m) \
  352.     (m[0][1] = m[0][2] = m[1][0] = m[1][2] = m[2][0] = m[2][1] = 0, \
  353.      m[0][0] = m[1][1] = m[2][2] = FONE)
  354.  
  355. #define Mxpose(m) \
  356.     do { \
  357.         short    zt; \
  358.         zt = m[0][1];    m[0][1] = m[1][0];    m[1][0] = zt; \
  359.         zt = m[0][2];    m[0][2] = m[2][0];    m[2][0] = zt; \
  360.         zt = m[1][2];    m[1][2] = m[2][1];    m[2][1] = zt; \
  361.     } while (0)
  362. #else
  363. extern void    FAR FASTCALL Mident (MAT m);
  364. extern void    FAR FASTCALL Mxpose (MAT m);
  365. #endif
  366.  
  367. #define    Mcopy(to,from)    memcpy (to, from, sizeof (MAT))
  368. #define    Vcopy(to,from)    memcpy (to, from, sizeof (VECT))
  369. #define    LVcopy(to,from)    memcpy (to, from, sizeof (LVECT))
  370. #define    AVcopy(to,from)    memcpy (to, from, sizeof (AVECT))
  371.  
  372. extern void    FAR FASTCALL fMrotx (MAT m, short s, short c);
  373. extern void    FAR FASTCALL fMroty (MAT m, short s, short c);
  374. extern void    FAR FASTCALL fMrotz (MAT m, short s, short c);
  375. #define Mrotx(m,d)    fMrotx (m, SIN(d), COS(d))
  376. #define Mroty(m,d)    fMroty (m, SIN(d), COS(d))
  377. #define Mrotz(m,d)    fMrotz (m, SIN(d), COS(d))
  378.  
  379. extern void    FAR Mobj (OBJECT *p);
  380. extern void    FAR Myxz (MAT m, AVECT a);
  381. extern void    FAR VxMmul (VECT R, VECT V, MAT M);
  382. extern void    FAR Mmul (MAT m, MAT t);
  383. extern void    FAR Vscale (VECT a, VECT b, int scalar);
  384. extern void    FAR Vmuldiv (VECT a, VECT b, int m, int d);
  385. extern void    FAR Mangles (OBJECT *p, MAT m, AVECT a, ANGLE dy);
  386. extern void    FAR Euler (OBJECT *p);
  387. extern void    FAR cbuild_matyxz (MAT T, int spitch, int cpitch, int sroll,
  388.     int croll, int syaw, int cyaw);
  389.  
  390. /* some related macros */
  391.  
  392. #define    Vinc(to,from)    ((to)[X]+=(from)[X], \
  393.              (to)[Y]+=(from)[Y], \
  394.              (to)[Z]+=(from)[Z])
  395. #define    Vdec(to,from)    ((to)[X]-=(from)[X], \
  396.              (to)[Y]-=(from)[Y], \
  397.              (to)[Z]-=(from)[Z])
  398. #define    Vadd(to,a,b)    ((to)[X]=(a)[X]+(b)[X], \
  399.              (to)[Y]=(a)[Y]+(b)[Y], \
  400.              (to)[Z]=(a)[Z]+(b)[Z])
  401. #define    Vsub(to,a,b)    ((to)[X]=(a)[X]-(b)[X], \
  402.              (to)[Y]=(a)[Y]-(b)[Y], \
  403.              (to)[Z]=(a)[Z]-(b)[Z])
  404. #define VMRfmul(V,M,n) \
  405.     (fmul(V[X],M[X][n]) + fmul(V[Y],M[Y][n]) + fmul(V[Z],M[Z][n]))
  406.  
  407. /* max.c */
  408. extern int    FAR max_read (MACRO *Macros);
  409.  
  410. /* memory.c */
  411. extern void *    FAR xmalloc (Uint size);
  412. extern void *    FAR xcalloc (Uint size, Uint count);
  413. extern char *    FAR xstrdup (const char *s);
  414. extern void *    FAR xfree (void *block);
  415. extern void *    FAR mem_alloc  (Uint bytes);
  416. extern void *    FAR memd_alloc (Uint bytes, char *file, int lineno);
  417. extern void *    FAR mem_free  (void *block, int bytes);
  418. extern void *    FAR memd_free (void *block, int bytes, char *file, int lineno);
  419. extern char *    FAR mem_strdup  (const char *s);
  420. extern char *    FAR memd_strdup (const char *s, char *file, int lineno);
  421. extern void *    FAR mem_strfree  (char *s);
  422. extern void *    FAR memd_strfree (char *s, char *file, int lineno);
  423. extern void    FAR mem_check (void);
  424. extern int    FAR mem_init (void);
  425. extern void    FAR mem_term (void);
  426.  
  427. #ifdef MEM_DEBUG
  428.  
  429. #define memory_alloc(n)        memd_alloc (n, __FILE__, __LINE__)
  430. #define memory_free(b,n)    memd_free ((b), (n), __FILE__, __LINE__)
  431. #define STRdup(s)        memd_strdup ((s), __FILE__, __LINE__)
  432. #define STRfree(s)        memd_strfree ((s), __FILE__, __LINE__)
  433.  
  434. #else
  435.  
  436. #define memory_alloc(n)        mem_alloc (n)
  437. #define memory_free(b,n)    mem_free ((b), (n))
  438. #define STRdup(s)        mem_strdup (s)
  439. #define STRfree(s)        mem_strfree (s)
  440.  
  441. #endif
  442.  
  443. #define memory_calloc(n,s)    memory_alloc ((n)*(s))
  444. #define memory_cfree(b,n,s)    (memory_free ((b), (n)*(s)), (void *)NULL)
  445.  
  446. #define    NEW(p)    ((p) = memory_alloc (sizeof (*(p))))
  447. #define    DEL(p)    memory_free ((p), sizeof (*(p)))
  448. #define    DEL0(p)    (DEL(p), (p) = 0)
  449.  
  450. /* menu.c */
  451. extern char    FAR menuch[];
  452. extern int    FAR menu_open (MENU *menu, int selected);
  453. #define    MENU_ABORTED    -1
  454. #define    MENU_FAILED    -2
  455. extern void    FAR menu_close (void);
  456. extern int    FAR hdd_menu (VIEW *view, int orgx, int orgy, int maxx,
  457.     int maxy);
  458. extern void    FAR show_menu (VIEW *view, int orgx, int orgy, int maxx,
  459.     int maxy, int bss);
  460. extern void    FAR get_num (char *name, void *value, int type, long vmin,
  461.     long vmax, long vinc);
  462. #define MT_CHAR        1
  463. #define MT_SHORT    2
  464. #define MT_INT        3
  465. #define MT_LONG        4
  466. extern void    FAR SetOption (Ushort *i, Ushort mask);
  467.  
  468. /* menus.c */
  469. extern int    FAR menu_top (void);
  470. extern void    FAR set_screen (int sizex, int sizey);
  471.  
  472. /* message.c */
  473. extern HMSG *    FAR msg_del (const HMSG *p);
  474. extern HMSG *    FAR MsgPrintf (int ttl, const char *fmt, ...);
  475. extern HMSG *    FAR MsgEPrintf (int ttl, const char *fmt, ...);
  476. extern HMSG *    FAR MsgWPrintf (int ttl, const char *fmt, ...);
  477. extern void    FAR msg_show (int orgx, int orgy, int maxx, int maxy, int bss);
  478. extern void    FAR msg_clear (int hard);
  479. extern int    FAR msg_init (void);
  480. extern void    FAR msg_term (void);
  481.  
  482. /* msubs.asm */
  483. extern int    FAR FASTCALL fmula (int x, int y);
  484. extern int    FAR FASTCALL fdiva (int x, int y);
  485. extern int    FAR FASTCALL muldiva (int x, int y, int z);
  486. extern int    FAR FASTCALL dithadja (int x, int dither, int interval);
  487. extern void    FAR Vmula (VECT R, VECT V, MAT M);
  488. extern void    FAR matyxz (MAT T, int spitch, int cpitch, int sroll, int croll,
  489.     int syaw, int cyaw);
  490. extern short    FAR FASTCALL my_sina (ANGLE angle);
  491.  
  492. /* nav.c */
  493. extern int    FAR nav_init (void);
  494. extern void    FAR nav_term (void);
  495. extern int    FAR nav_find (char *name);
  496. extern int    FAR ils_get (OBJECT *p);
  497. extern void    FAR show_ils (HUD *h, OBJECT *p, int sx, int sy, int orgx,
  498.     int orgy, int ss, int shifty);
  499. extern int    FAR menu_ils (void);
  500. extern struct ils FAR *ils;
  501.  
  502.  
  503. /* need.c */
  504. #ifdef NEED_STRICMP
  505. extern int    FAR stricmp (const char *a, const char *b);
  506. #endif
  507. #ifdef NEED_STRNICMP
  508. extern int    FAR strnicmp (const char *a, const char *b, size_t n);
  509. #endif
  510. #ifdef NEED_STRDUP
  511. extern char *    FAR strdup (register const char *s);
  512. #endif
  513. #ifdef NEED_STRERROR
  514. extern char *    FAR strerror (int n);
  515. #endif
  516. #ifdef NEED_LABS
  517. extern long    FAR labs (long x);
  518. #endif
  519.  
  520. /* netmgr.c */
  521. extern int    FAR netports_init (void);
  522. extern void    FAR netports_term (void);
  523. extern void    FAR netports_receive (void);
  524. extern void    FAR netports_poll (void);
  525. extern void    FAR netport_count (PLAYER *pl, int delta);
  526. extern int    FAR packet_deliver (PACKET *pack);
  527. extern int    FAR packet_send (PACKET *pack, int mode);
  528. extern PACKET *    FAR packet_new (short size, short hlen);
  529. extern PACKET *    FAR packet_del (PACKET *pack);
  530. extern void    FAR PlName (PLAYER *pl);
  531. extern char *    FAR netport_name (int port);
  532. extern char *    FAR netport_addr (int port, Uchar *addr);
  533.  
  534. /* noellipse.c */
  535. extern void    FAR NoEllipse (Uint x1, Uint y1, Uint rx, Uint ry, Uint color);
  536.  
  537. /* nokbd.c */
  538. extern struct KbdDriver NEAR KbdNone;
  539.  
  540. /* nosound.c */
  541. extern struct SndDriver NEAR SndNone;
  542.  
  543. /* nosystem.c */
  544. extern struct SysDriver NEAR SysNone;
  545.  
  546. /* notimer.c */
  547. extern struct TmDriver NEAR TmNone;
  548.  
  549. /* obasic.c */
  550. extern void    FAR dynamics_basic (OBJECT *p, int action);
  551.  
  552. /* object.c */
  553. extern OBJECT *    FAR create_object (ONAME name, int init);
  554. extern OBJECT *    FAR create_land (ONAME name);
  555. extern OBJECT *    FAR delete_object (OBJECT *object);
  556. extern OBJECT *    FAR delete_land (OBJECT *object);
  557. extern void    FAR list_clear (OBJECT *list[]);
  558. extern void *    FAR shape_free (VERTEX *vx);
  559. extern int    FAR shape_read (SHAPE *shape, char *VxFileName);
  560.  
  561. /* objects.c */
  562. extern void    FAR object_rand (OBJECT *obj, int speed, int extent, int noise);
  563. extern int    FAR object_break (int n, int speed, int extent, int noise);
  564. extern void    FAR object_hit (OBJECT *obj, int seed, int speed, int extent,
  565.     int damaging);
  566. extern void    FAR object_update (OBJECT *p, int interval);
  567. extern void    FAR object_dynamics (OBJECT *p, int interval);
  568. extern int    FAR objects_dynamics (int interval);
  569.  
  570. /* obox.c */
  571. extern BODY    BoBox;
  572.  
  573. /* obroken.c */
  574. extern BODY    BoBroken;
  575.  
  576. /* ochute.c */
  577. extern BODY     BoChute;
  578.  
  579. /* oclassic.c */
  580. extern void    FAR dynamics_classic (OBJECT *p, int action);
  581.  
  582. /* ocrater.c */
  583. extern BODY     BoCrater;
  584.  
  585. /* ofplane.c */
  586. extern void    FAR dynamics_fplane (OBJECT *p, int action);
  587.  
  588. /* ogen.c */
  589. extern int    FAR gen_init (BODY *b);
  590. extern int    FAR gen_read (BODY *b);
  591. extern void    FAR gen_term (BODY *b);
  592. extern int    FAR gen_create   (OBJECT *p);
  593. extern int    FAR gen_nocreate (OBJECT *p);
  594. extern void    FAR gen_delete (OBJECT *p);
  595. extern void    FAR gen_dynamics   (OBJECT *p, int interval);
  596. extern void    FAR gen_nodynamics (OBJECT *p, int interval);
  597. extern void    FAR gen_hit   (OBJECT *p, int speed, int extent, int damaging);
  598. extern void    FAR gen_nohit (OBJECT *p, int speed, int extent, int damaging);
  599.  
  600. /* oground.c */
  601. extern BODY     BoGround;
  602.  
  603. /* ogtarget.c */
  604. extern BODY     BoGtarget;
  605.  
  606. /* ohouse.c */
  607. extern BODY     BoHouse;
  608.  
  609. /* olow.c */
  610. extern BODY     BoLow;
  611.  
  612. /* om61.c */
  613. extern BODY     BoM61;
  614.  
  615. /* omk82.c */
  616. extern BODY     BoMK82;
  617.  
  618. /* opaddoc.c */
  619. extern int    FAR paddoc_init (BODY *b);
  620.  
  621. /* oplane.c */
  622. extern void    FAR eject (OBJECT *obj);
  623. extern void    FAR shoot (OBJECT *p, int weapon, int n, int seed,
  624.         int interval);
  625. extern void    FAR place_plane (OBJECT *p, short home);
  626. extern void    FAR emit_drone (void);
  627. extern char *    FAR get_wname (int w);
  628. extern void    FAR plane_smoke (OBJECT *p);
  629. extern BODY    BoPlane;
  630.  
  631. /* orunway.c */
  632. extern BODY     BoRunway;
  633.  
  634. /* osmoke.c */
  635. extern BODY     BoSmoke;
  636.  
  637. /* otarget.c */
  638. extern BODY     BoTarget;
  639.  
  640. /* otower.c */
  641. extern BODY     BoTower;
  642.  
  643. /* oviewer.c */
  644. extern BODY     BoViewer;
  645.  
  646. /* oxplane.c */
  647. extern void    FAR dynamics_xplane (OBJECT *p, int action);
  648.  
  649. /* oyplane.c */
  650. extern void    FAR dynamics_yplane (OBJECT *p, int action);
  651.  
  652. /* panel.c */
  653. extern void    FAR show_panel (VIEW *view, OBJECT *p, int maxx, int maxy,
  654.         int orgx, int orgy, int ss);
  655.  
  656. /* pid.c */
  657. extern long    FAR pid_calc (PID *pid, long P, int interval);
  658.  
  659. /* piper.c */
  660. extern void    FAR show_piper (HUD *h, OBJECT *obj, OBJECT *target, int x,
  661.         int y, int dx, int dy, int ds, int mode, int off_screen, int dist,
  662.         int tti, int closure, int orgx, int orgy, int clipx, int clipy,
  663.         int hbottom, int hleft, int ss, int shifty);
  664.  
  665. /* pitch.c */
  666. extern void    FAR show_pitch (HUD *h, VIEW *view, OBJECT *p, int sx, int sy,
  667.         int maxx, int maxy, int orgx, int orgy, int ttx, int tty, int tx,
  668.         int ty, int ss, int shifty, int mode, int VVD[2]);
  669.  
  670. /* player.c */
  671. extern int    FAR players_init (void);
  672. extern void    FAR players_term (void);
  673. extern void    FAR players_delete (void);
  674. extern void    FAR players_remove (PLAYER *ptype);
  675. extern void    FAR players_purge (void);
  676. extern void    FAR players_flush (void);
  677.  
  678. extern PLAYER *    FAR player_add (PACKET *pack);
  679. extern PLAYER *    FAR player_delete (PLAYER *player);
  680. extern PLAYER *    FAR player_find (PACKET *pack);
  681. extern PLAYER *    FAR player_next (PLAYER *player);
  682. extern PLAYER *    FAR player_active (PACKET *pack);
  683. extern void    FAR player_remove (PLAYER *player);
  684.  
  685. /* ptrmgr.c */
  686. extern int    FAR pointers_init (void);
  687. extern void    FAR pointers_term (void);
  688. extern POINTER * FAR pointer_select (char *pname);
  689. extern POINTER * FAR pointer_release (POINTER *ptr);
  690. extern void    FAR std_key (POINTER *p, int key);
  691. extern int    FAR menu_ptrs (void);
  692. extern void    FAR do_btn (POINTER *p, int button, int state);
  693. extern void    FAR do_btns (POINTER *p, char *btn, int size);
  694. extern int    FAR menu_btn (void);
  695.  
  696. /* radar.c */
  697. extern void    FAR show_radar (HUD *h, VIEW *view, OBJECT *p, OBJECT *pov,
  698.         int orgx, int orgy, int maxx, int maxy, int tx, int ty, int ss,
  699.         int clipx, int clipy, int sx, int sy, int shifty, int VVD[2],
  700.         int mode, int hon);
  701. extern void    FAR show_data (OBJECT *obj, int datax, int datay, int detail,
  702.         int knots, int dist, int closure, char *name, int tti, int mode,
  703.         int ss, Uint color);
  704. extern char *    FAR get_name (OBJECT *obj, OBJECT *target, int mode);
  705. extern int    FAR get_center (OBJECT *p, int orgy, int sy, int VVD[2]);
  706.  
  707. /* remote.c */
  708.  
  709. #define RC_SENDOK       0x00
  710. #define RC_PACKED       0xfe
  711. #define RC_SENDFAIL     0xff
  712.  
  713. extern int    FAR remote_urhit (OBJECT *p, int speed, int extent,
  714.         int damaging);
  715. extern int    FAR remote_imhit (OBJECT *p, int seed, int speed, int extent,
  716.         int damaging);
  717. extern int    FAR crc (PACKET *pack);
  718. extern int    FAR remote_init (void);
  719. extern void    FAR remote_term (void);
  720. extern int    FAR send_obj (OBJECT *p, PLAYER *player);
  721. extern void    FAR remote_receive (OBJECT *p);
  722. extern void    FAR remote_ping (void);
  723. extern void    FAR remote_request (PLAYER *pl);
  724. extern void    FAR remote_noplay (PLAYER *pl);
  725. extern void    FAR remote_reply (PLAYER *pl, int reply);
  726. extern void    FAR remote_shoot (OBJECT *p, int weapon, int n, int seed,
  727.         int interval);
  728. extern void    FAR remote_msg (char *text, PLAYER *pl);
  729. extern void    FAR remote_time (PLAYER *pl);
  730. extern void    FAR remote_refresh (void);
  731.  
  732. /* show.c */
  733. extern void    FAR objects_show (int mode, VIEW *view, OBJECT *pov, int color,
  734.         LVECT OR, VECT RR);
  735.  
  736. /* sky.c */
  737. extern int    FAR sky_init (void);
  738. extern void    FAR sky_term (void);
  739. extern void    FAR show_sky (VIEW *view, OBJECT *p);
  740.  
  741. /* sndmgr.c */
  742. extern struct SndDriver NEAR* FAR sound_init (char *name);
  743. extern void    FAR sound_term (void);
  744.  
  745. /* speed.c */
  746. extern void    FAR show_speed (HUD *h, OBJECT *p, int sx, int sy, int maxx,
  747.         int maxy, int orgx, int orgy, int ttx, int tty, int tx, int ty, int ss,
  748.         int shifty, int VVD[2]);
  749.  
  750. /* stfont1.c */
  751. extern char NEAR* NEAR StFont1[];
  752.  
  753. /* stfont2.c */
  754. extern char NEAR* NEAR StFont2[];
  755.  
  756. /* stores.c */
  757. extern void    FAR show_stores (VIEW *view, OBJECT *p, int maxx, int maxy,
  758.         int orgx, int orgy, int ss);
  759.  
  760. /* stroke.c */
  761. extern int    FAR font_set (int font);
  762. extern void    FAR stroke_angle (ANGLE angle);
  763. extern int    FAR stroke_decimal (int c);
  764. extern int    FAR num_size (long num, int ss);
  765. extern void    FAR num_extent (long num, int ss, int *exs, int *exc,
  766.         int *eys, int *eyc);
  767. extern int    FAR char_size (int Char, int size);
  768. extern int    FAR stroke_size (char *s, int size);
  769. extern int    FAR stroke_char (int x, int y, int digit, int size, int color);
  770. extern int    FAR stroke_str (int x, int y, char *p, int size, int color);
  771. extern int    FAR stroke_num (int x, int y, long num, int size, int color);
  772. extern int    FAR frac_size (long num, int digits, int frac, int ss);
  773. extern int    FAR stroke_frac (int x, int y, long num, int digits, int frac,
  774.         int size, int color);
  775.  
  776. /* symbols.c */
  777. extern void    FAR show_w (int x, int y, int tx, int ty, int color);
  778. extern void    FAR show_x (int x, int y, int tx, int ty, int color);
  779. extern void    FAR show_rect (int x, int y, int tx, int ty, int color,
  780.     int showx);
  781. extern void    FAR show_brect (int x, int y, int tx, int ty, int ratio,
  782.     int color, int showx);
  783. extern void    FAR show_diamond (int x, int y, int tx, int ty, int color,
  784.         int showx);
  785. extern void    FAR show_plus (int x, int y, int tx, int ty, int color);
  786. extern void    FAR show_bplus (int x, int y, int tx, int ty, int ratio,
  787.     int color);
  788. extern void    FAR show_fpm (int x, int y, int rx, int ry, int tx, int ty,
  789.         int color, int round);
  790. extern void    FAR show_dir (int x, int y, int rx, int ry, int tx, int ty,
  791.         int color);
  792. extern void    FAR show_dir1 (int x, int y, int rx, int ry, int tx, int ty,
  793.         int sa, int ca, int color,
  794.         int orgx, int orgy, int sx, int sy, int shifty);
  795. extern void    FAR show_ptr (int x, int y, int rx, int ry, int tx, int ty,
  796.         int color, int round);
  797. extern void    FAR show_trig (int x, int y, int dx, int dy, int color);
  798.  
  799. /* system.c */
  800. extern void    FAR sim_set (void);
  801. extern void    FAR sim_reset (void);
  802. extern void    FAR sys_poll (int id);
  803. extern void    FAR iefbr14 (void);
  804.  
  805. /* term.c */
  806. extern void    FAR terminate (int StackUsed);
  807. extern void    FAR die (void);
  808.  
  809. /* tunes.c */
  810. extern int    FAR TnHello[];
  811. extern int    FAR TnGone[];
  812. extern int    FAR TnHit[];
  813. extern int    FAR TnEngine[];
  814. extern int    FAR TnAlarm[];
  815. extern int    FAR TnWarn[];
  816. extern int    FAR TnNotice[];
  817. extern int    FAR TnGear[];
  818. extern int    FAR TnMsg[];
  819. extern int    FAR TnDamage[];
  820. extern int    FAR TnBlues[];
  821.  
  822. /* util.c */
  823. extern int    FAR opt36 (int c);
  824. extern int    FAR get_long (char *p, long *lp);
  825. extern int    FAR get_int (char *p, int *li);
  826. extern char *    FAR get_arg (char *options, char *argname);
  827. extern char *    FAR get_iarg (char *options, int argno);
  828. extern int    FAR get_narg (char *options, char *argname, long *lp);
  829. extern int    FAR get_niarg (char *options, int argno, long *lp);
  830. extern char *    FAR get_parg (char *options, char *argname);
  831. extern char *    FAR get_piarg (char *options, int argno);
  832. extern int    FAR looping (int i);
  833. extern int    FAR Frand (void);
  834. extern void    FAR Fsrand (Uint seed);
  835. extern void    FAR Frandomize (void);
  836. extern Uchar *    FAR show_l (long n);
  837. extern Uchar *    FAR show_ul (Ulong n);
  838. extern Uchar *    FAR show_ulf (Ulong n, Ulong f);
  839. extern Uchar *    FAR show_time (char *title, Ulong tt);
  840. extern Uint    FAR ComGBw (Uchar *p);
  841. extern Uint    FAR ComGLw (Uchar *p);
  842. extern void    FAR ComPBw (Uchar *p, Uint w);
  843. extern void    FAR ComPBl (Uchar *p, Ulong l);
  844. extern void    FAR ComPLw (Uchar *p, Uint w);
  845.  
  846. /* version.c */
  847. extern char *    FAR welcome (int log);
  848.  
  849. /* views.c */
  850. extern void    FAR get_area (VIEW *view, int *orgx, int *orgy, int *maxx,
  851.         int *maxy);
  852. extern void    FAR get_square (VIEW *view, int maxx, int maxy, int *sizex,
  853.         int *sizey);
  854. extern void    FAR show_main (VIEW *view, OBJECT *p, int mode, int special);
  855. extern int    FAR scenery (int type);
  856. extern void    FAR show_hdd (void);
  857. extern int    FAR menu_view (int type);
  858. extern int    FAR hdd_menu (VIEW *view, int orgx, int orgy, int maxx,
  859.         int maxy);
  860.  
  861. /* vmodes.c */
  862. extern int    FAR vm_read (void);
  863. extern void    FAR vm_free (void);
  864.  
  865. /* vv.c */
  866. extern void    FAR show_vv (HUD *h, VIEW *view, OBJECT *p, int color);
  867. extern void    FAR show_wl (HUD *h, OBJECT *p, int color);
  868.  
  869. /* waypoint.c */
  870. extern void    FAR show_waypoint (HUD *h, VIEW *view, OBJECT *p);
  871.  
  872. /* window.c */
  873. extern void    FAR windows_term (void);
  874. extern void    FAR windows_set (void);
  875. extern void    FAR set_screen (int sizex, int sizey);
  876. extern void    FAR set_main (void);
  877. extern void    FAR set_small_frame (void);
  878. extern void    FAR set_large_frame (void);
  879. extern void    FAR zoom (VIEWPORT *vp, int zoom);
  880. extern int    FAR window_select (void);
  881. extern int    FAR menu_windows (void);
  882.  
  883. /* $(SYSTEM)/ *.c
  884.  * (these must be supplied by the system dependent subdirectory).
  885. */
  886. extern struct GrDriver  NEAR *FAR GrDrivers[];
  887. extern struct SndDriver NEAR *FAR SndDrivers[];
  888. extern struct PtrDriver NEAR *FAR PtrDrivers[];
  889. extern struct KbdDriver NEAR *FAR KbdDrivers[];
  890. extern struct NetDriver NEAR *FAR NetDrivers[];
  891. extern struct SysDriver NEAR SysDriver;
  892. extern struct TmDriver  NEAR TmDriver;
  893.  
  894. /* Fixed point math macros. 'n' is number of fraction bits.
  895. */
  896.  
  897. #define    FnMUL(n,x,y)    ((int)(((x) * (long)(y)) >> (n)))
  898. #define    FnDIV(n,x,y)    ((int)(((long)(x) << (n)) / (y)))
  899. #define    FnCON(n,c)    ((int)((1 << (n)) * (double)(c)))
  900. #define    FnONE(n)    FnCON(n,1)
  901.  
  902. #define FSCALE        14        /* fraction bits in sine/cos etc. */
  903. #define    FCON(c)        FnCON (FSCALE, (c))
  904. #define    FONE        FnONE(FSCALE)
  905. #define    fuscale(x)    ((x) >> FSCALE)
  906.  
  907. #define VSCALE        4        /* fraction bits in v (speed) */
  908. #define    VONE        FnONE(VSCALE)
  909. #define DV(x)        ((x)>>VSCALE)
  910. #define    VMAX        0x7fff
  911. #define    vscale(x)    ((int)((x) * (long)VONE))
  912. #define    vuscale(x)    ((x) >> VSCALE)
  913.  
  914. #define    TADJ(x)        dithadj ((x), st.dither, st.interval)
  915.  
  916. #ifndef offsetof
  917. #define offsetof(t,m)    ((char *)&(((t *)0)->m) - (char *)0)
  918. #endif
  919.  
  920. #endif /* ifndef FLY8_EXTERN */
  921.  
  922.